#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;


//int main()
//{
//    int x;
//    cin >> x;
//    while (x--)
//    {
//        int ret = 0;
//        int a, b, c;
//        cin >> a >> b >> c;
//
//        int min = a;
//        if (b < min)
//            min = b;
//        if (c < min)
//            min = c;
//
//        ret += 2 * min;
//
//        b -= min;
//        if (b > 0)
//            ret += b - 1;
//        cout << ret << endl;
//
//    }
//    return 0;
//}

//#include<vector>
//class Solution {
//public:
//    void _rotApple(vector<vector<int> >& grid, int x, int y, int& record)
//    {
//        if (grid[x][y] == 1)
//            ++grid[x][y];
//        if (grid[x][y] == 2)
//        {
//            ++record;
//            if (x - 1 >= 0 && grid[x - 1][y] != 2)
//                _rotApple(grid, x - 1, y, record);
//            if (x + 1 < grid.size() && grid[x + 1][y] != 2)
//                _rotApple(grid, x + 1, y, record);
//            if (y - 1 >= 0 && grid[x][y - 1] != 2)
//                _rotApple(grid, x, y - 1, record);
//            if (y + 1 < grid[x].size() && grid[x][y + 1] != 2)
//                _rotApple(grid, x, y + 1, record);
//
//           
//            return;
//        }
//        
//
//        if(grid[x][y] == 0)
//            return;
//    }
//
//    int rotApple(vector<vector<int> >& grid) 
//    {
//        int record = 0;
//        for (int i = 0; i < grid.size(); ++i)
//        {
//            for (int j = 0; j < grid[i].size(); ++j)
//            {
//                if (grid[i][j] == 2)
//                {
//                    _rotApple(grid, i, j, record);
//                    return record;
//                }
//            }
//        }
//    }
//};
//int main()
//{
//    vector<int> tmp1 = { 2,1,1 };
//    vector<int> tmp2 = { 1,0,1 };
//    vector<int> tmp3 = { 1,1,1 };
//    vector<vector<int>> v = { tmp1, tmp2, tmp3 };
//
//    Solution().rotApple(v);
//    return 0;
//}

#include<list>
class Solution {
public:

    int LastRemaining_Solution(int n, int m)
    {
        list<int> l;
        for (int i = 0; i < n; ++i)
        {
            l.push_back(i);
        }

        list<int>::iterator it = l.begin();
        while (l.size() > 1)
        {
            int tmp = m - 1;
            while (tmp--)
            {
                ++it;
                if (it == l.end())
                    it = l.begin();
            }
            it = l.erase(it);
            if (it == l.end())
                it = l.begin();
        }
        return *l.begin();
    }
};
int main()
{
    cout <<Solution().LastRemaining_Solution(5, 3) << endl;
    return 0;
}